//
// Created by Administrator on 2023/2/27.
// 日期问题
//参考程序一
//

#include <iostream>
#include <algorithm>

using namespace std;

bool isLeap(int y) //是否为闰年
{
    if (y % 400 == 0 || y % 100 != 0 && y % 4 == 0)  //闰年
        return true;
    return false;
}

//平年每个月的天数
int monthDays[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
//闰年每个月的天数
int leapMonthDays[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

//判断是否为有效的日期
bool isValidDate(int year, int month, int day)
{
    if (year >= 60) year = 1900 + year;
    else year = 2000 + year;
    if (month > 12) return false;
    if (isLeap(year)) //闰年
        for (int i = 1; i <= 12; i++)
        {
            if (day > leapMonthDays[i])  //日是否有效
                return false;
        }
    else  //平年
        for (int i = 1; i <= 12; i++)
        {
            if (day > monthDays[i])  //日是否有效
                return false;
        }
    return true;//返回是有效日期
}

int main()
{
    int dates[3];//有效日期数组
    string dateT;//输入日期 字符串 如"02/03/04"
    cout << "input date:";
    cin >> dateT;
    string str1 = dateT.substr(0, 2); //02
    string str2 = dateT.substr(3, 2);  //03
    string str3 = dateT.substr(6, 2);  //04
    int d1 = atoi(str1.c_str());  //2
    int d2 = atoi(str2.c_str()); //3
    int d3 = atoi(str3.c_str());  //4
    int i = 0; //有效日期个数
    int j;
    if (isValidDate(d1, d2, d3))  //年月日
    {
        int year = d1;
        if (year >= 60) year = 1900 + year;
        else year = 2000 + year;
        int n = year * 10000 + d2 * 100 + d3; // 20020304
        dates[i] = n;
        i++;
    }
    if (isValidDate(d3, d1, d2))  //月日年
    {
        int year = d3;
        if (year >= 60) year = 1900 + year;
        else year = 2000 + year;
        int n = year * 10000 + d1 * 100 + d2;// 20040203
        for (j = 0; j < i; j++)
        {
            if (dates[j] == n)
                break;
        }
        if (j == i)  //数组里没有这个日期
        {
            dates[i] = n;   // 存入数组
            i++;
        }
    }
    if (isValidDate(d3, d2, d1))  //日月年 04 03  02
    {
        int year = d3;
        if (year >= 60) year = 1900 + year;
        else year = 2000 + year;
        int n = year * 10000 + d2 * 100 + d1;// 20040302
        for (j = 0; j < i; j++)
        {
            if (dates[j] == n)
                break;
        }
        if (j == i)  //数组里没有这个日期
        {
            dates[i] = n;   // 存入数组
            i++;
        }
    }
    //对数组元素进行从小到大进行排序
    sort(dates, dates + i);
    for (int j = 0; j < i; j++)
    {
        cout << dates[j] / 10000 << "-" << dates[j] % 10000 / 100 << "-"
             << dates[j] % 100 << endl;
    }
    return 0;
}